/*
 * 内存布局定义
 * 定义物理内存范围和虚拟地址空间布局
 */

#ifndef MEMLAYOUT_H
#define MEMLAYOUT_H

#include "riscv.h"  // 需要MAXVA和PGSIZE定义

// 物理内存布局（QEMU virt平台）
#define KERNBASE 0x80000000L    // 内核加载基地址
#define PHYSTOP  0x88000000L    // 物理内存结束地址（128MB）

// 设备地址映射
#define UART0    0x10000000L    // UART0基地址
#define VIRTIO0  0x10001000L    // VirtIO设备基地址
#define PLIC     0x0c000000L    // 平台级中断控制器

// 虚拟地址空间布局
#define TRAMPOLINE (MAXVA - PGSIZE)  // 跳板页（最高虚拟地址）

// 内核栈相关定义
#define KSTACK_SIZE (2 * PGSIZE)     // 内核栈大小
#define KSTACK_GAP  PGSIZE           // 栈之间的保护间隙

// 用户地址空间
#define USER_TOP    0x40000000L      // 用户空间顶部
#define USER_STACK  (USER_TOP - PGSIZE) // 用户栈位置

#endif // MEMLAYOUT_H